package com.umfwechat.lightprogram.controller.pos;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.umfwechat.common.ReqMessage;
import com.umfwechat.util.PropertyUtil;
import com.umfwechat.util.RedisUtil;
import com.umfwechat.util.ReqMessageUtil;
import com.umfwechat.util.SaasPropertyUtil;
import com.umfwechat.util.StringReaderUtils;
import com.umfwechat.util.StringUtil;
import com.umfwechat.util.WexinQrCodeUtil;
import com.umfwechat.util.ZipUtil;
import com.umfwechat.util.wx.WeixinHttpClientUtils;
import com.umpay.sp.model.saas.OperplatRel;
import com.umpay.sp.model.saas.StoreInf;
import com.umpay.sp.service.saas.remote.OperPlatRelServiceRemot;
import com.umpay.sp.service.saas.remote.StoreInfServiceRemote;

/*********************************************
 * PosGetBankList.java
 * Author: Vermouth.yf
 * Created on: 2017-5-24
 *
 * Details:  涉及pos开通的三个接口
 *           《开通pos信息提交》 ---弃用
 *           《查询银行名称》 ---弃用
 *           《回调》
 *           
 *           照片上传在另外的controller
 * 
 ********************************************/

@Controller
@RequestMapping("/merchantProductDeploy")
public class MerchantPosController {
	
	private static Logger logger = LoggerFactory.getLogger(MerchantPosController.class);
	
	private static final String weixin_ACCESS_TOKEN_NOT_COMPLETE = PropertyUtil.getStrValue("umfWeChatPlat_appConf.properties","weixin.access.token", "");
	private static final String weixin_SEND_METHOD = "POST";
	private static final String ADMIN = "admin";
	
	private static final String STATE_CANCELED = "";
//	private static final String STATE_OK = "2";
	
	
	private static final String DATASOURCE = "SAAS";  //默认？
	
	private static final long M = 1048576;   
	//pos回调成功模板
	private static final String YESTEMPLATE_ID = PropertyUtil.getStrValue("umfWeChatPlat_appConf.properties","posYesTemplate", ""); 
	//pos回调驳回模板
	private static final String NOTEMPLATE_ID =  PropertyUtil.getStrValue("umfWeChatPlat_appConf.properties","posNoTemplate", ""); 

	//0104
	private static final String P2_0104 = PropertyUtil.getStrValue("umfWeChatPlat_appConf.properties","p2.0104", "");
	private static final String P2_0196 = PropertyUtil.getStrValue("umfWeChatPlat_appConf.properties","p2.0196", "");
	private static final String P2_0142 = PropertyUtil.getStrValue("umfWeChatPlat_appConf.properties","p2.0142", "");
	
	private static final String ZIPPATHSRC = PropertyUtil.getStrValue("umfWeChatPlat_appConf.properties","zip.path", "");
	
	@Resource
	private StoreInfServiceRemote storeInfServiceRemote;  
	
	@Resource 
	private OperPlatRelServiceRemot operPlatRelServiceRemot;   
	
	/**
	 * 《开通pos信息提交》
	 * Author: Vermouth.yf 
	 * Date: 2017-5-25 
	 * @param request
	 * @param response
	 * @return
	 * @throws Exception
	 */
	@RequestMapping(value="/openPosSubmit",produces="application/json;charset=UTF-8")
	@ResponseBody
	@SuppressWarnings("unchecked")
	public JSONObject openPosSubmit(HttpServletRequest request, HttpServletResponse response) throws Exception{
        // 第一步  调代理商进件接口  
		logger.info("----*---------*--开通pos信息提交，开始--*---------*--");
		Map<String,Object>  resultMap = new HashMap<String,Object>();   //流程最后返回给小程序的map
		
//	     /*----------------生产用，如需测试则注释掉整块代码------------------------ 
			String reqJSON=(String) request.getAttribute("_requestData");
//			String reqJSON = StringReaderUtils.readFromIO(request.getInputStream());  //from front end
			logger.info("----*---------*-- inputStream "+reqJSON+"--*---------*--");
			JSONObject jsonFromLP = null;   // json from light program
			
			try{
			jsonFromLP = JSONObject.fromObject(reqJSON);  
			}catch(Exception e){
				resultMap.put("retCode", "0001");
				resultMap.put("retMsg", "请求参数不足");
				logger.info("----*---------*--开通pos信息提交,数据转换异常--*---------*--" + e);
				return JSONObject.fromObject(resultMap);
			}
			
			String  alipay = "";
			String  arate = "";   // 支付宝费率
			String  wechat = "";   //微信
			String  wrate = "";   //微信费率
			
			String alipayThreeId = "";  //支付宝经营三级类目
			String installAreaName = ""; // 这2个字段是线下平台新加的字段，这个版本还不确定SAAS调用是否必须传递这个字段
			String agentId = "";  
			String userId = "";  //登录的userid
			
			String  applyShType = "";  //申请商户类别 
			String  mernamesm = "";  //商户简称
			String  busiName = "";  //营业执照名称
			String  merNature = "";  //商户性质
			String  licenseNo = ""; //营业执照号
			String  vldEndDt = "";  //营业执照有效期
			String  dateOpen = "";  //成立日期
			String  lawyer = ""; //法人姓名
			String  ciertiType = ""; //法人证件类型
			String  certCode = "";  //法人证件号
			String  majarBusi = "";  //主营业务
			String  regAmt = "";   //C 注册资金（万元）
			String  empoNum = "";   //员工数量
			String  provCode = "";   //商户注册地址省份
			String  areaCode = "";   //商户注册地址城市
			String  code = "";   //C 商户注册地址区域
			String  merAddr = "";   // 商户注册地址详细地址
			String  hyType = "";   // 商户所属行业类别
			String  registrationNo = "";   //C 组织机构代码
			String  addBusiness = "";   // 是否开通额外业务
			String  starttime = "";   // 营业开始时间
			String  endtime = "";   // 营业结束时间
			String  linkMan = "";   //联系人
			String  mobileId = "";   // 联系人手机号
			String  linkManProvinceCode = "";   //联系人地址省份
			String  linkManCityCode = "";   // 联系人地址城市
			String  linkManAddr = "";   // 联系人地址详细地址
			String  zipCd = "";   // 邮编
			String  bankName = "";   // 银行名称
			String  branceName = "";   // 支行名称
			String  bkAcName = "";   // 银行户名
			String  bkAcId = "";   // 银行帐号
			String  openProvinceCode = "";   // 开户地省份
			String  openCityCode = "";   // 开户地省城市
			String  modelType = "";   // 机具类型 
			String  loginTel = "";   // C 登录手机号
			String  rateD0 = "";   //C  D0费率(%)
			String  accountNameAuth = "";   //C 结算人姓名 
			String  idNoAuth = "";   //C 身份证号
			String  cardNoCipher = "";   //C 信用卡卡号
			String  bankCardNameList = "";   //所属银行
			String  rateD1 = "";   //C D1费率(%)
			String  isDiscount = "";   //C 参与优惠活动
			String  contrId = "";   // 协议编号
			String  jfeerate = "";   //借记卡费率（%）
			String  debitCapamt = "";   //借记卡封顶金额（元）
			String  dfeerate = "";   //贷记卡费率（%）
			String  dfeeCapamt = "";   //贷记卡封顶金额（元）
			String  modelNames = "";   //终端型号
			String  terminalNums = "";   //机具数量(个)
			String  installProvName = "";   //商户装机地址省份
			String  installCityName = "";   // 商户装机地址城市
			String  installDetailAddr = "";   //商户装机地址详细地址
			String  getTermType = "";   //机具模式
			String  getTermAmt = "";   //机具金额(元)
			String  preState = "";   //申请开通预授权
			
			String  oneYardPay = "";   //一码付
			String  wechatThreeId = "";   // 微信经营三级类目
			String  callbackUrl = "";   // 回调地址
			
			
			String registrationMark = "";  //N 现场注册标识  
			String  linkTelEmail = "";  //N 联系人邮箱
			String  telPhone = ""; //N 联系人固定电话
			String  withdrawType = "";  //N 提现类型
			String  mobileIdAuth = "";  //N 银行预留手机号
			String  CVV2 = "";  //N  CVV2
			String  endDate = "";  //N 信用卡有效期
			String  remark = "";  //N 备注
			String  phone = "";  //N  客服电话
			
			
			String agentType = "";  // 文档里没有！  代理商类型    下一次交互需要用
			String storeId = "";  // 文档里没有！ 但是修改店铺状态那里需要
			String imgUrl = "";  //图片回显地址数组  由front end输送
			
			String formId = "";
	         //↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓  分界线      ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
		
			/***getString方法会刨异常， 但使用get方法的话。会得到null值
			           解决措施如下：
			                      全部用get获取值  然后对于获取的值判断，如果为null 则不put进map!
			      
			      **/
//			try{  //
			 agentId = (String)jsonFromLP.get("loginAgentId");  
			 userId = (String)jsonFromLP.get("loginUserId");  //登录的userid
			
			  applyShType = (String)jsonFromLP.get("applyShType");  //申请商户类别 
			  mernamesm = (String)jsonFromLP.get("mernamesm");  //商户简称
			  busiName = (String)jsonFromLP.get("busiName");  //营业执照名称
			  merNature = (String)jsonFromLP.get("merNature");  //商户性质
			  licenseNo = (String)jsonFromLP.get("licenseNo"); //营业执照号
			  vldEndDt = (String)jsonFromLP.get("vldEndDt");  //营业执照有效期
			  dateOpen = (String)jsonFromLP.get("dateOpen");  //成立日期
			  lawyer = (String)jsonFromLP.get("lawyer"); //法人姓名
			  ciertiType = (String)jsonFromLP.get("ciertiType"); //法人证件类型
			  certCode = (String)jsonFromLP.get("certCode");  //法人证件号
			  majarBusi = (String)jsonFromLP.get("majarBusi");  //主营业务
			  empoNum = (String)jsonFromLP.get("empoNum");   //员工数量
			  provCode = (String)jsonFromLP.get("provCode");   //商户注册地址省份
			  areaCode = (String)jsonFromLP.get("areaCode");   //商户注册地址城市
			  merAddr = (String)jsonFromLP.get("merAddr");   // 商户注册地址详细地址
			  hyType = (String)jsonFromLP.get("hyType");   // 商户所属行业类别
			  addBusiness = (String)jsonFromLP.get("addBusiness");   // 是否开通额外业务
			  starttime = (String)jsonFromLP.get("starttime");   // 营业开始时间
			  endtime = (String)jsonFromLP.get("endtime");   // 营业结束时间
			  linkMan = (String)jsonFromLP.get("linkMan");   //联系人
			  mobileId = (String)jsonFromLP.get("mobileId");   // 联系人手机号
			  linkManProvinceCode = (String)jsonFromLP.get("linkManProvinceCode");   //联系人地址省份
			  linkManCityCode = (String)jsonFromLP.get("linkManCityCode");   // 联系人地址城市
			  linkManAddr = (String)jsonFromLP.get("linkManAddr");   // 联系人地址详细地址
			  zipCd = (String)jsonFromLP.get("zipCd");   // 邮编
			  bankName = (String)jsonFromLP.get("bankName");   // 银行名称
			  branceName = (String)jsonFromLP.get("branceName");   // 支行名称
			  bkAcName = (String)jsonFromLP.get("bkAcName");   // 银行户名
			  bkAcId = (String)jsonFromLP.get("bkAcId");   // 银行帐号
			  openProvinceCode = (String)jsonFromLP.get("openProvinceCode");   // 开户地省份
			  openCityCode = (String)jsonFromLP.get("openCityCode");   // 开户地省城市
			  modelType = (String)jsonFromLP.get("modelType");   // 机具类型 
			  bankCardNameList = (String)jsonFromLP.get("bankCardNameList");   //所属银行
			  contrId = (String)jsonFromLP.get("contrId");   // 协议编号
			  jfeerate = (String)jsonFromLP.get("jfeerate");   //借记卡费率（%）
			  debitCapamt = (String)jsonFromLP.get("debitCapamt");   //借记卡封顶金额（元）
			  dfeerate = (String)jsonFromLP.get("dfeerate");   //贷记卡费率（%）
			  dfeeCapamt = (String)jsonFromLP.get("dfeeCapamt");   //贷记卡封顶金额（元）
			  modelNames = (String)jsonFromLP.get("modelNames");   //终端型号
			  terminalNums = (String)jsonFromLP.get("terminalNums");   //机具数量(个)
			  installProvName = (String)jsonFromLP.get("installProvName");   //商户装机地址省份
			  installCityName = (String)jsonFromLP.get("installCityName");   // 商户装机地址城市
			  installDetailAddr = (String)jsonFromLP.get("installDetailAddr");   //商户装机地址详细地址
			  getTermType = (String)jsonFromLP.get("getTermType");   //机具模式
			  getTermAmt = (String)jsonFromLP.get("getTermAmt");   //机具金额(元)
			  preState = (String)jsonFromLP.get("preState");   //申请开通预授权
			  oneYardPay = (String)jsonFromLP.get("oneYardPay");   //一码付
			  callbackUrl = (String)jsonFromLP.get("callbackUrl");   // 回调地址
			  agentType = (String)jsonFromLP.get("agentType");  // 文档里没有！  代理商类型    下一次交互需要用
			  storeId = (String)jsonFromLP.get("storeId");  // 文档里没有！ 但是修改店铺状态那里需要
			  alipay = (String)jsonFromLP.get("alipay");   // 支付宝
			  wechat = (String)jsonFromLP.get("wechat");   //微信
			  
			  wrate = (String)jsonFromLP.get("wrate");   //C 微信费率
			  arate = (String)jsonFromLP.get("arate");   //C 支付宝费率
			  alipayThreeId = (String)jsonFromLP.get("alipayThreeId"); //C 支付宝经营三级类目
			  wechatThreeId = (String)jsonFromLP.get("wechatThreeId");   //C 微信经营三级类目
			  installAreaName = (String)jsonFromLP.get("installAreaName");  //C
			  regAmt = (String)jsonFromLP.get("regAmt");   //C 注册资金（万元）
			  code = (String)jsonFromLP.get("code");   //C 商户注册地址区域
			  registrationNo = (String)jsonFromLP.get("registrationNo");   //C 组织机构代码
			  loginTel = (String)jsonFromLP.get("loginTel");   // C 登录手机号
			  rateD0 = (String)jsonFromLP.get("rateD0");   //C  D0费率(%)
			  accountNameAuth = (String)jsonFromLP.get("accountNameAuth");   //C 结算人姓名 
			  idNoAuth = (String)jsonFromLP.get("idNoAuth");   //C 身份证号
			  cardNoCipher = (String)jsonFromLP.get("cardNoCipher");   //C 信用卡卡号
			  rateD1 = (String)jsonFromLP.get("rateD1");   //C D1费率(%)
			  isDiscount = (String)jsonFromLP.get("isDiscount");   //C 参与优惠活动
			   registrationMark = (String)jsonFromLP.get("registrationMark");  //N 现场注册标识  
			   linkTelEmail = (String)jsonFromLP.get("linkTelEmail");  //N 联系人邮箱
			   telPhone = (String)jsonFromLP.get("telPhone"); //N 联系人固定电话
			   withdrawType = (String)jsonFromLP.get("withdrawType");  //N 提现类型
			   mobileIdAuth = (String)jsonFromLP.get("mobileIdAuth");  //N 银行预留手机号
			   CVV2 = (String)jsonFromLP.get("CVV2");  //N  CVV2
			   endDate = (String)jsonFromLP.get("endDate");  //N 信用卡有效期
			   remark = (String)jsonFromLP.get("remark");  //N 备注
			   phone = (String)jsonFromLP.get("phone");  //N  客服电话
			   
			   //↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓这个只能用getString获取↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
			   imgUrl =jsonFromLP.getString("imgUrl");  //图片地址数组  用于获取图片  web server不需要
			   
			   //↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓回调给微信的↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
			   formId =jsonFromLP.getString("formId");
			  
//			}catch(Exception e){
//				logger.info("----*---------*--front end parameters error--*---------*--" + e);
//				//按理说  由getString() 换到 get()  是不会出现异常的，如果没有key值对应的value. 是会获取到null 而非抛出异常
//			}
			
			if(imgUrl.equals("[]")){
				resultMap.put("retCode", "0001");
				resultMap.put("retMsg", "图片数组为空");
				return JSONObject.fromObject(resultMap);
			}
			//得到的是不是形如  ["中国建设银行","中国工商银行","中国农业银行","中国银行"]
        //--------------↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑生产环境获取参数方式↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑-----------------------*/
			
			String redisKey = "login"+agentId+userId;
			// 生产时需要去掉↓↓↓↓↓↓↓↓↓↓手动put进缓存↓↓↓↓↓↓↓↓↓↓
//	        RedisUtil.set("login"+agentId+userId, 30*24*60*60, userId+","+"a1"+","+"admin123"); // "a1" 是 assistid  "admin123" 是password 
			logger.info("-----------------redisKey-------------------- "+redisKey);
			RedisUtil.set("templatePos"+storeId, 7*24*60*60 ,formId);   // 这步不能去，就是pos回调用到的就是在这一步put进缓存的
			
			
	      //-------------取出缓存中的 assistid 和 password----------------------
	        String redisValue = RedisUtil.get(redisKey);
	        //userId,assistId,password,其他
	        String [] strArr = redisValue.split(",");
	        String assistid = strArr[1];
	        logger.info("-----------------assistid-------------------- " + assistid);
	        String password = strArr[2];
	        logger.info("-----------------i know-------------------- " + password);
	        String dataSource = DATASOURCE;	
			
			ReqMessage reqMessage = ReqMessageUtil.makeReq(); 
			Map<String,Object> reqMap1 = reqMessage.getReqMap();   //请求web server的map
			String rpid = null;
			rpid = reqMessage.getRpid();
			logger.info("------------------first rpid  "+rpid+"------------------");
			
			reqMap1.put("rpid", rpid);
			reqMap1.put("merRpid", rpid);   //开户流水号 与 rpid一致
			
			reqMap1.put("reqDate", reqMessage.getReqDate());
			reqMap1.put("reqTime", reqMessage.getReqTime());
			reqMap1.put("agentId", agentId);
			reqMap1.put("userid", userId);
			reqMap1.put("assistid", assistid);
			reqMap1.put("password", password);
			reqMap1.put("dataSource", dataSource);
			
			
			reqMap1.put("applyShType", applyShType);
			reqMap1.put("mernamesm", mernamesm);
			reqMap1.put("busiName", busiName);
			reqMap1.put("merNature", merNature);
			reqMap1.put("licenseNo", licenseNo);
			reqMap1.put("vldEndDt", vldEndDt);
			reqMap1.put("dateOpen", dateOpen);
			reqMap1.put("lawyer", lawyer);
			reqMap1.put("ciertiType", ciertiType);
			reqMap1.put("certCode", certCode);
			reqMap1.put("majarBusi", majarBusi);
			reqMap1.put("empoNum", empoNum);
			reqMap1.put("provCode", provCode);
			reqMap1.put("areaCode", areaCode);
			reqMap1.put("merAddr", merAddr);
			reqMap1.put("hyType", hyType);
			reqMap1.put("addBusiness", addBusiness);
			reqMap1.put("starttime", starttime);
			reqMap1.put("endtime", endtime);
			reqMap1.put("linkMan", linkMan);
			reqMap1.put("mobileId", mobileId);
			reqMap1.put("linkManProvinceCode", linkManProvinceCode);
			reqMap1.put("linkManCityCode", linkManCityCode);
			reqMap1.put("linkManAddr", linkManAddr);
			reqMap1.put("zipCd", zipCd);
			reqMap1.put("bankName", bankName);
			reqMap1.put("branceName", branceName);
			reqMap1.put("bkAcName", bkAcName);
			reqMap1.put("bkAcId", bkAcId);
			reqMap1.put("openProvinceCode", openProvinceCode);
			reqMap1.put("openCityCode", openCityCode);
			reqMap1.put("modelType", modelType);
			
			reqMap1.put("contrId", contrId);
			reqMap1.put("jfeerate", jfeerate);
			reqMap1.put("debitCapamt", debitCapamt);
			reqMap1.put("dfeerate", dfeerate);
			reqMap1.put("dfeeCapamt", dfeeCapamt);
			reqMap1.put("modelNames", modelNames);
			reqMap1.put("terminalNums", terminalNums);
			reqMap1.put("installProvName", installProvName);
			reqMap1.put("installCityName", installCityName);
			reqMap1.put("installDetailAddr", installDetailAddr);
			reqMap1.put("getTermType", getTermType);
			reqMap1.put("getTermAmt", getTermAmt);
			reqMap1.put("preState", preState);
			reqMap1.put("alipay", alipay);
			reqMap1.put("wechat", wechat);
			reqMap1.put("oneYardPay", oneYardPay);
			reqMap1.put("callbackUrl", callbackUrl);
			
			//↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓非必传字段↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
			// 必须做这种判断，不然的话会将null值put给p2  然后报错
			
			if(!StringUtil.isEmpty(alipayThreeId)){
				reqMap1.put("alipayThreeId", alipayThreeId);
			}
			
			if(!StringUtil.isEmpty(wechatThreeId)){
				reqMap1.put("wechatThreeId", wechatThreeId);
			}
			if(!StringUtil.isEmpty(installAreaName)){
				reqMap1.put("installAreaName", installAreaName);
			}
			if(!StringUtil.isEmpty(arate)){
				reqMap1.put("arate", arate);
			}
			if(!StringUtil.isEmpty(wrate)){
				reqMap1.put("wrate", wrate);
			}
			if(!StringUtil.isEmpty(bankCardNameList)){
				reqMap1.put("bankCardNameList", bankCardNameList);
				}
			
			if(!StringUtil.isEmpty(regAmt)){
			reqMap1.put("regAmt", regAmt);
			}
			if(!StringUtil.isEmpty(code)){
			reqMap1.put("code", code);
			}
			if(!StringUtil.isEmpty(registrationNo)){
				reqMap1.put("registrationNo", registrationNo);
				}
			if(!StringUtil.isEmpty(loginTel)){
				reqMap1.put("loginTel", loginTel);
			}
			if(!StringUtil.isEmpty(rateD0)){
				reqMap1.put("rateD0", rateD0);
			}
			if(!StringUtil.isEmpty(accountNameAuth)){
				reqMap1.put("accountNameAuth", accountNameAuth);
			}
			if(!StringUtil.isEmpty(idNoAuth)){
				reqMap1.put("idNoAuth", idNoAuth);
			}
			if(!StringUtil.isEmpty(cardNoCipher)){
				reqMap1.put("cardNoCipher", cardNoCipher);
			}
			if(!StringUtil.isEmpty(rateD1)){
				reqMap1.put("rateD1", rateD1);
			}
			if(!StringUtil.isEmpty(isDiscount)){
				reqMap1.put("isDiscount", isDiscount);
			}
			if(!StringUtil.isEmpty(registrationMark)){
				reqMap1.put("registrationMark",registrationMark);
			}
			if(!StringUtil.isEmpty(linkTelEmail)){
				reqMap1.put("linkTelEmail",linkTelEmail);
			}
			if(!StringUtil.isEmpty(telPhone)){
				reqMap1.put("telPhone",telPhone);
			}
			if(!StringUtil.isEmpty(withdrawType)){
				reqMap1.put("withdrawType",withdrawType);
			}
			if(!StringUtil.isEmpty(mobileIdAuth)){
				reqMap1.put("mobileIdAuth",mobileIdAuth);
			}
			if(!StringUtil.isEmpty(CVV2)){
				reqMap1.put("CVV2",CVV2);
			}
			if(!StringUtil.isEmpty(endDate)){
				reqMap1.put("endDate",endDate);
			}
			if(!StringUtil.isEmpty(remark)){
				reqMap1.put("remark",remark);
			}
			if(!StringUtil.isEmpty(phone)){
				reqMap1.put("phone",phone);
			}
			
			Map<String,Object> fromWebServer = null;   //几次和web server的交互重复利用
			logger.info("----*---------*--开通pos信息提交,去访问  "+P2_0104 +" --*---------*--");
			try{
	        fromWebServer  =  com.umpay.http.platform2.HttpUtil.httpPostForm2Xml
	        		(P2_0104, reqMap1,"GBK");  //代理商进件接口
			}catch(Exception e){
				resultMap.put("retCode", "0001");
				resultMap.put("retMsg", "代理商进件接口返回异常");
				logger.info("----*---------*--开通pos信息提交,代理商进件接口返回异常--*---------*--" + e);
				return JSONObject.fromObject(resultMap);
			}
      //    处理第一次和web Server的交互 返回的报文
			String retCode1 = (String)fromWebServer.get("retCode");
			String retMsg1 = (String)fromWebServer.get("retMsg");
			String ProMess1 = (String)fromWebServer.get("ProMess"); //只有在错误的时候才有具体值
			
			if(!"0000".equals(retCode1)){
				resultMap.put("retCode", "0001");  
				logger.info("----*---------*--开通pos信息提交,第一次和企业web交互失败--*---------*--");
				resultMap.put("retMsg", retMsg1);
				resultMap.put("ProMess", ProMess1);
				logger.info("去0104接口   返回的retCode= "+retCode1+" retMsg= " + retMsg1 +" ProMess= "+ProMess1);
				return JSONObject.fromObject(resultMap);
			}  //出错   然后第一次交互就结束整个流程
			
			
			
			//↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓第一次交互成功后才有↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
		    String merId = (String)fromWebServer.get("merId");    //商户编号  由企业server返回,《资质压缩包上传接口》需要的参数
//			String merId = "B2017060500000003";
		    logger.info("----！---------！--merId "+merId+" --!---------!--");
		    fromWebServer.clear();   //  用于测试0196连通性  把这行注掉
		    
		    //↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 利用前台给的imgUrl数组  遍历生成图片文件  ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
		    if(StringUtil.isEmpty(imgUrl)){
		    	logger.info("----*---------*--开通pos信息提交,获取服务器上的图片地址失败--*---------*--");
		    	resultMap.put("retCode", "0001");
		    	resultMap.put("retMsg", "获取服务器上的图片地址失败");
				return JSONObject.fromObject(resultMap);
				
		    }
		    
	  //↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓打包模块↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
		    
		    // ...../umfWeChatPlat/   这样的路径
	    	String srcPath = ZIPPATHSRC;
	    	logger.info("-------------srcPath-------------"+srcPath);  //看到结尾带 "/"
	    	JSONArray imgUrlJSONArr = null;
	    	try{
		     imgUrlJSONArr = JSONArray.fromObject(imgUrl);
	    	}catch(Exception e){
	    		logger.info("-------------img json error-------------"+e);
	    		resultMap.put("retCode", "0001");
		    	resultMap.put("retMsg", "图片数组格式有问题");
				return JSONObject.fromObject(resultMap);
	    	}
	    	System.out.println("++++++++++++++++++++++++upload img start+++++++++++++++++++++++");
	    	System.out.println(new Date());
		    Iterator<String> it = imgUrlJSONArr.iterator();     
		    List<String> paths = new ArrayList<String>();  //图片本地完整路径地址
		    //http://10.10.67.77:8180/umfWeChatPlat/merchantDeploy/showImg?name=/usr/mpsp/duizhang/qualification/apply/c2ce61cd2d2946ccb1c6327cf027444c.jpg
		    while(it.hasNext()){   
		    	String imgHttpPath = it.next();   //完整回显路径 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
		    	String path = imgHttpPath.substring(imgHttpPath.lastIndexOf("=")+1) ;  //要每一个数组成员 "="后面的路径
		    	paths.add(path);
		    	logger.info("-------------imglist-------------"+path);
		    }
		    String zipPath = srcPath + "zipFile" ;  
		    String zipFilePath = zipPath+ File.separator + storeId + ".zip";   //压缩文件路径
		    logger.info("----*---------*--zip file stored in "+zipFilePath+" ----*---------*--");
		    File zipDir = new File(zipPath);   //创建存放zip的目录
		    if(!zipDir.exists()){
		    	zipDir.mkdir();
		    	logger.info("----*---------*--zip dir does not exist, so create it!----*---------*--");
		    }
		    File zipFile = new File(zipFilePath);  //真正的压缩文件
		    try{
		    ZipUtil.zip(zipFile, paths);  //压缩没问题
		    }catch(Exception e){
		    	logger.info("----*---------*--compress error \n"+e);
		    	resultMap.put("retCode", "0001");
		    	resultMap.put("retMsg", "压缩包打包失败");
				return JSONObject.fromObject(resultMap);
		    }
		    logger.info("ZIPIMG end:" + new Date());
		    
		    //判断文件大小   压缩文件大小不能超过5M
		      if(zipFile.length()>5*M){
		    	  resultMap.put("retCode", "0001");
			      resultMap.put("retMsg", "压缩包大小超过5MB");
				  return JSONObject.fromObject(resultMap);
		      }
		    
				logger.info("----*---------*--create "+zipFilePath+" successfully--*---------*--");
				String zipBase64 = encodeZip(zipFilePath);  //压缩包的BASE64字符串   
  //↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑打包模块↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑				
				logger.info("BASE64 end:" + new Date()); 
				//第二次交互     传输压缩文件
				ReqMessage reqMessage1 = ReqMessageUtil.makeReq(); 
			    Map<String,Object> reqMap2 = reqMessage1.getReqMap();   //重新生成
			    
			    String rpidZip = reqMessage1.getRpid();
			    
			    reqMap2.put("rpid", rpidZip);
				reqMap2.put("reqDate", reqMessage1.getReqDate());
				reqMap2.put("reqTime", reqMessage1.getReqTime());
				reqMap2.put("agentId", agentId);   
				reqMap2.put("userid", userId);
				reqMap2.put("assistid", assistid);
				reqMap2.put("dataSource", dataSource);
				reqMap2.put("merId", merId);   //由上一步交互获取
			    reqMap2.put("agentType", agentType);    //哪来的代理商类型
			    logger.info("----*---------*--except base64 \n"+reqMap2);
			    
			    reqMap2.put("SourceZip", zipBase64);    //压缩包生成的BASE64字符串
			    logger.info("----*---------*--开通pos信息提交,去访问  "+P2_0196 +" --*---------*--");
			    try{
			    	fromWebServer  =  com.umpay.http.platform2.HttpUtil.httpPostForm2Xml
			        		(P2_0196, reqMap2,"GBK");  //资质上传接口
					}catch(Exception e){
						logger.info("1096 end:" + new Date());
						resultMap.put("retCode", "0001");
						resultMap.put("retMsg", "代理商进件接口返回异常");
						logger.info("----*---------*--开通pos信息提交,代理商进件接口返回异常--*---------*--" + e);
						
						return JSONObject.fromObject(resultMap);
					}
			    
			    
			    //处理第二次交互的反馈内容
			    String retCode2 = (String)fromWebServer.get("retCode");
				String retMsg2 = (String)fromWebServer.get("retMsg");
				String ProMess2 = (String)fromWebServer.get("ProMess"); //只有在错误的时候才有具体值

				logger.info("++++++++++++++++++++++++upload img end+++++++++++++++++++++++");
			    if(!"0000".equals(retCode2)){  
			    	logger.info("----*---------*--开通pos信息提交,资质文件上传失败--*---------*--");
			    	resultMap.put("retCode", "0001");
			    	resultMap.put("retMsg", retMsg2);
	                resultMap.put("ProMess", ProMess2);
	                logger.info("去0196接口   返回的retCode= "+retCode2+" retMsg= " + retMsg2 +" ProMess= "+ProMess2);
					return JSONObject.fromObject(resultMap);
			    }
			    
			    //0196完成时间
			    Date date = new Date();
			    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
			    String updateTime = dateFormat.format(date);
			    RedisUtil.set(merId+"-updateTime", 7*24*60*60 , updateTime);  //回调取出
			    logger.info("----*---------*--开通pos信息提交,资质文件上传完成时间--*---------*-- "+updateTime);
					
    //---------------------------------第三次交互  修改店铺状态-----------------------------------------
		    com.umpay.sp.model.common.ReqMessage reqM = ReqMessageUtil.makeSpReq();  //sp的ReqMessage
		    reqM.put("storeId", storeId);   // 页面前端获取 
		    logger.info("----*---------*--根据店铺编号查询店铺详情，请求参数：--*---------*--" + reqM);
		    com.umpay.sp.model.common.ResMessage resM = null;
		    try {
				logger.info("----*---------*--根据店铺编号查询店铺详情，请求参数：--*---------*--" + reqM);
				resM = storeInfServiceRemote.getStoreInfByPri(reqM);
				logger.info("----*---------*--根据店铺编号查询店铺详情，返回参数：--*---------*--" + resM);
			} catch (Exception e) {
				resultMap.put("retCode", "0001");
				resultMap.put("retMsg", "服务器异常，请稍后再试");
				logger.info("----*---------*--根据店铺编号查询店铺详情异常--*---------*--" + e);
				return JSONObject.fromObject(resultMap);
			}
			if(!"0000".equals(resM.getRetCode())){	//查询店铺详情失败或异常
				resultMap.put("retCode", "0001");
				resultMap.put("retMsg", "服务器异常，请稍后再试");
				return JSONObject.fromObject(resultMap);
			}else if(resM.getResMap().get("storeInf") == null){	//未获取到店铺信息，storeId不存在
				resultMap.put("retCode", "0001");
				resultMap.put("retMsg", "获取店铺信息失败");
				return JSONObject.fromObject(resultMap);
			}
			//查询到店铺信息
		    
		    StoreInf storeInf = (StoreInf) resM.getResMap().get("storeInf");   //获取到商户信息对象
		    logger.info("----*---------*--开通pos信息提交,storeInf--*---------*--"+storeInf);
		    
		    storeInf.setIntime(null);
			storeInf.setModtime(null);
			storeInf.setRegisterProcsState("54");
		    
			Map<String, String> storeMap = SaasPropertyUtil.javaBeanToMap(storeInf);
			com.umpay.sp.model.common.ReqMessage req = ReqMessageUtil.makeSpReq();   //更新店铺状态
			com.umpay.sp.model.common.ResMessage res = null;
			req.putAll(storeMap);    // 这个storeMap应该包含了  storeId以内的各种字段的信息了吧？
			
			try {
				logger.info("----#---------#--更新店铺信息，请求参数：--#---------#--" + req);
				res = storeInfServiceRemote.updateStoreInf(req);
				logger.info("----#---------#--更新店铺信息，返回参数：--#---------#--" + res);
			} catch (Exception e) {
				resultMap.put("retCode", "0001");
				resultMap.put("retMsg", "服务器异常，请稍后再试");
				logger.info("----#---------#--更新店铺信息异常--#---------#--" + e);
				return JSONObject.fromObject(resultMap);
			}
			
		    
		    if("0000".equals(res.getRetCode())){
				resultMap.put("retCode", "0000");
				resultMap.put("retMsg", res.getRetMsg());
			}else {
				resultMap.put("retCode", "0001");
				resultMap.put("retMsg", res.getRetMsg());
			}
		
	    return JSONObject.fromObject(resultMap);
	}


	/**
		 * 《查询银行名称》
		 * Author: Vermouth.yf 
		 * Date: 2017-5-24 
		 * @param session
		 * @param request
		 * @param response
		 * @return
		 * @throws Exception
		 */
		@RequestMapping(value="/queryBankNameList",produces="application/json;charset=UTF-8") 
		@ResponseBody
		public JSONObject queryBankNameList(HttpServletRequest request, HttpServletResponse response) throws Exception{
			logger.info("----*---------*--查询银行名称列表，开始--*---------*--");
			Map<String,Object> resultMap = new HashMap<String,Object>();
			
//	     /*----------------生产用，如需测试则注释掉整块代码------------------------ 
			String reqJSON=(String) request.getAttribute("_requestData");
			logger.info("----*---------*-- inputStream "+reqJSON+"--*---------*--");
			JSONObject jsonFromLP = null;   // json from light program
			
			try{
			jsonFromLP = JSONObject.fromObject(reqJSON);
			}catch(Exception e){
				resultMap.put("retCode", "0001");
				resultMap.put("retMsg", "请求参数不足");
				logger.info("----*---------*--查询银行名称列表,数据转换异常--*---------*--" + e);
				return JSONObject.fromObject(resultMap);
			}
			
			String agentId = (String)jsonFromLP.get("loginAgentId");  //代理商编号    全局
			String userId = (String)jsonFromLP.get("loginUserId");  //登录的userid
			
			String pageNum = (String)jsonFromLP.get("pageNum");   //页码  
			String pageSize = (String)jsonFromLP.get("pageSize");  //每页显示数  
			String binbankname = (String)jsonFromLP.get("binbankname");  //银行名称（支持模糊查询）
			
//			--------------------------------------------------------------*/
							
//		/*-------------------测试用    测试的时候把上面的代码块关闭然后开启这个块-------------------------
//			String agentId = request.getParameter("loginAgentId");  
//			String userId = request.getParameter("loginUserId");
//			String pageNum = request.getParameter("pageNum");
//			String pageSize = request.getParameter("pageSize");
//			String binbankname = request.getParameter("binbankname");
//			----------------------------------------------*/
			
			if(StringUtil.isEmpty(pageNum)){
				pageNum = "1";
			}
			if(StringUtil.isEmpty(pageSize)){
				pageSize = "20";    
			}
			
			//生产时需要去掉---------手动put进缓存--------
//	        RedisUtil.set("login"+agentId+userId, 30*24*60*60, userId+","+"a1"+","+"admin123"); // "a1" 是 assistid  "admin123" 是password 
			
	        //-------------取出缓存中的 assistid 和 password----------------------
	        String redisKey = "login"+agentId+userId;
	        String redisValue = RedisUtil.get(redisKey);
	        //userId,assistId,password,其他
	        String [] strArr = redisValue.split(",");
	        String assistid = strArr[1];   
	        logger.info("-----------------assistid-------------------- " + assistid);
	        String password = strArr[2];   
	        logger.info("-----------------i know-------------------- " + password);
	        String dataSource = DATASOURCE;	
	        
			ReqMessage reqMessage = ReqMessageUtil.makeReq();
			Map<String,Object> reqMap = reqMessage.getReqMap();
			
			reqMap.put("rpid", reqMessage.getRpid());
			reqMap.put("reqDate", reqMessage.getReqDate());
			reqMap.put("reqTime", reqMessage.getReqTime());
			reqMap.put("pageNum",pageNum);
			reqMap.put("pageSize",pageSize);
			reqMap.put("binbankname", binbankname);
			
			reqMap.put("userid",userId);
			reqMap.put("assistid",assistid);
			reqMap.put("password",password);
			reqMap.put("dataSource",dataSource);
			reqMap.put("agentId", agentId);   //代理商编号  Y/E/S+9位数字
			logger.info("----------- reqMap ------------ \n"+reqMap.toString());
			logger.info("----*---------*--查询银行名称列表,去访问  "+P2_0142 +" --*---------*--");
			Map<String,Object> fromWebServer = null;
			try{
				fromWebServer = com.umpay.http.platform2.HttpUtil.httpPostForm2Xml
			                             (P2_0142, reqMap,"GBK");  
			}catch(Exception e){
				resultMap.put("retCode", "0001");
				String error = e.getMessage();
				resultMap.put("retMsg", error);
				logger.info("----*---------*--查询银行名称列表,web到server异常--*---------*--");
				return JSONObject.fromObject(resultMap);
				
			}
			//从res获得的内容 retCode retMsg  list 
			String retCode = (String)fromWebServer.get("retCode");
			String retMsg = (String)fromWebServer.get("retMsg");
			Object listStr = null;
			String ProMess = "";  //非0000 情况时返回
			
			if("0000".equals(retCode)){
				//成功时  解析银行列表
				resultMap.put("retCode", retCode);
				
			    listStr = fromWebServer.get("listStr");
			    if(listStr==null){
			    	retMsg = "listStr为null";
			    }
				
				if(listStr instanceof JSONObject){
					logger.info("----*---------*--server返回的listStr 内容是json对象--*---------*--");  //目前来看是这个
					resultMap.put("listStr", listStr.toString());
	//				retMsg = "listStr 是json对象".concat(listStr.toString());   //仅用于测验
				}else if(listStr instanceof String){
					logger.info("----*---------*--server返回的listStr 内容是String对象--*---------*--");
					resultMap.put("listStr", listStr);
	//				retMsg = "listStr 是String对象".concat(listStr.toString());  //仅用于测验
				}else{
					logger.info("----*---------*--server返回的listStr 内容类型不明--*---------*--");
					resultMap.put("listStr", listStr);
				}
				resultMap.put("retMsg", retMsg);
				
			}else{   
	        /***
	         * 当输出参数retCode==00080700 时，接口才会返回ProMess，提示具体字段错误信息（一般为参数正则或非空校验不匹配）。
	         * 此时retMsg==系统忙！请稍后再试！  。当retCode！=00080700时，接口不会返回ProMess字段，
	         * 此时retMsg字段标识相应的成功或错误信息。
	         */
				ProMess = (String)fromWebServer.get("ProMess");   //没有就是null
				resultMap.put("retCode", "0001");
				resultMap.put("retMsg", retMsg);
				resultMap.put("ProMess", ProMess);
				logger.info("----*---------*--查询银行名称列表,web到server查询失败--*---------*--   "+ProMess);
				logger.info("去0142接口   返回的retCode= "+retCode+" retMsg= " + retMsg +" ProMess= "+ProMess);
				return JSONObject.fromObject(resultMap);
			}
			
			logger.info(">>>>>>最终返回前台的银行listStr"+listStr+">>>>>>");
			return JSONObject.fromObject(resultMap);
		}


	/**
	 * 《回调》
	 * Author: Vermouth.yf 
	 * Date: 2017-6-1 
	 * @param request
	 * @param response
	 * @return
	 * @throws Exception
	 */
	@RequestMapping(value="/posCallbackMethod",produces="text/html;charset=UTF-8")
	@ResponseBody
	@SuppressWarnings("unchecked")
	public String posCallbackMethod(HttpServletRequest request, HttpServletResponse response) throws Exception{ //回调接口也是这种形式request response么
		//回调不需要走加密层  所以这个地方是返回String 
		
		// 第一步  调修改店铺信息接口
		logger.info("----*---------*--开通 回调 接口，开始--*---------*--");
		Map<String,Object>  resultMap = new HashMap<String,Object>();
		
//		-----------------------获取参数     不是来自于客户端-------------------------
		String reqMapFromOuter = StringReaderUtils.readFromIO(request.getInputStream());   //这个不走加密层
 		logger.info("----*---------*-- inputStream "+reqMapFromOuter+"--*---------*--");
		JSONObject jsonFromPE = null;
		try{
			jsonFromPE = JSONObject.fromObject(reqMapFromOuter);
 		}catch(Exception e){
			resultMap.put("retCode", "0001");
			resultMap.put("retMsg", "回调请求参数不足");
			logger.info("----*---------*--回调,数据转换异常--*---------*--" + e);
			return JSONObject.fromObject(resultMap).toString();
		}
	
		String agentId = (String)jsonFromPE.get("agentId");      //代理商编号		
		String merId = (String)jsonFromPE.get("merId");          // 商户编号
		String mernamesm = (String)jsonFromPE.get("mernamesm");  //商户简称		
		String isRegect = (String)jsonFromPE.get("isRegect");    // 0正常提交     1驳回
 		String userid = "";         // 协商让田野传过来  是业务员的id
		String retMsgFromp2 = (String)jsonFromPE.get("retMsg");  //驳回原因 
		
		//------------------------------------------------------------------------
		
		
		//------------------------自测用-------------------------
		
//		String mernamesm = "ces";
//		String merId ="60001091";          // 商户编号
//		String isRegect ="0";    //是否驳回
//		String retMsgFromp2 = "以及不通过";
//		String userid = "";
//		String agentId = "Y669621624";  	
//		//------------------------自测用--------------------------
		
		//---------------------------------第一次交互  修改店铺状态-----------------------------------------
	    com.umpay.sp.model.common.ReqMessage reqM = ReqMessageUtil.makeSpReq();
	    reqM.put("storeId", merId);   // 注意这里merId和storeId是一回事
	    logger.info("----*---------*--根据店铺编号查询店铺详情，请求参数：--*---------*--" + reqM);
	    com.umpay.sp.model.common.ResMessage resM = null;
	    try {
			logger.info("----*---------*--根据店铺编号查询店铺详情，请求参数：--*---------*--" + reqM);
			resM = storeInfServiceRemote.getStoreInfByPri(reqM);
			logger.info("----*---------*--根据店铺编号查询店铺详情，返回参数：--*---------*--" + resM);
		} catch (Exception e) {
			resultMap.put("retCode", "0001");
			resultMap.put("retMsg", "服务器异常，请稍后再试");
			logger.info("----*---------*--根据店铺编号查询店铺详情异常--*---------*--" + e);
			return JSONObject.fromObject(resultMap).toString();
		}
		if(!"0000".equals(resM.getRetCode())){	//查询店铺详情失败或异常
			resultMap.put("retCode", "0001");
			resultMap.put("retMsg", "服务器异常，请稍后再试");
			return JSONObject.fromObject(resultMap).toString();
		}else if(resM.getResMap().get("storeInf") == null){	//未获取到店铺信息，storeId不存在
			resultMap.put("retCode", "0001");
			resultMap.put("retMsg", "获取店铺信息失败");
			return JSONObject.fromObject(resultMap).toString();
		}
		//查询到店铺信息
	    
	    StoreInf storeInf = (StoreInf) resM.getResMap().get("storeInf");   //获取到商户信息对象
	    userid = storeInf.getSalesmanId();
	    String formId = storeInf.getFormId();    //这里的是根据pos提交时候的商户号关联的
	    String temid  ="";//模板id
	    if("0".equals(isRegect)){
	    	//审核通过
	    	temid = YESTEMPLATE_ID;
	    }else{
	    	//审核不通过
	    	temid =NOTEMPLATE_ID;
	    }
	    logger.info("----*---------*--店铺查到的userid--*---------*--"+userid);
	    logger.info("----*---------*--店铺查到的formId--*---------*--"+formId);
 	  //-------------------------获取token------------------------
 		
 		WexinQrCodeUtil util = new WexinQrCodeUtil();
    	//获取token
		String tokenR =  util.reqToken();
    	JSONObject object = JSONObject.fromObject(tokenR);
    	String token = object.optString("access_token");
 		logger.info("------------------token---------------- "+token);
 		
 		//---------------------------------------------------------
	    
 		/***
 		 * 给微信的模板信息的data字段的json值
 		 * data
 		 * 
 		 *   keyword1	商家名称	 mernamesm
 		 *   keyword2	申请时间	     
 		 *   keyword3	业务员 	 userid    
 		 *   keyword4	审核结果           isRegect   0 正常提交   1 驳回
 		 *   keyword5	未通过原因       retMsgFromp2
 		 * 
 		 */
 		
 		JSONObject data = new JSONObject();
 		 if("0".equals(isRegect)){
 	    	//审核通过
 			for(int i=1;i<=4;i++){
 	 			JSONObject tempdata = new JSONObject();
 	 			if(i==1){
 	 				tempdata.put("value", mernamesm);
 	 	 			tempdata.put("color", "#121212");
 	 			}else if(i==2){
 	 				tempdata.put("value", userid);
 	 	 			tempdata.put("color", "#DAA520");

 	 			}else if(i==3){
 	 				tempdata.put("value", "POS机");
 	 	 			tempdata.put("color", "#121212");

 	 			}else if(i==4){
 	 				tempdata.put("value", "已完成");
 	 	 			tempdata.put("color", "#008000");

 	 			} 	 			
 	 			data.put("keyword"+i, tempdata);
 	 		}
 	    }else{
 	    	//审核不通过
 	    	for(int i=1;i<=6;i++){
 	 			JSONObject tempdata = new JSONObject();
 	 			if(i==1){
 	 				tempdata.put("value", mernamesm);
 	 				tempdata.put("color", "#121212");
 	 			}else if(i==2){
 	 				tempdata.put("value", userid);
 	 				tempdata.put("color", "#121212");
 	 			}else if(i==3){
 	 				tempdata.put("value", "POS机");
 	 				tempdata.put("color", "#121212");
 	 			}else if(i==4){
 	 				tempdata.put("value", "未通过");
 	 				tempdata.put("color", "#FF0000");
 	 			} else if(i==5){
 	 				tempdata.put("value", retMsgFromp2);
 	 				tempdata.put("color", "#121212");
 	 			} else if(i==6){
 	 				tempdata.put("value", "请登录代理商自服务平台处理");
 	 				tempdata.put("color", "#121212");
 	 			} 
 	 			
 	 			data.put("keyword"+i, tempdata);
 	 		}
 	    }
	 
 		logger.info("---------------weixin json >> data -------------------\n" + data.toString());
	    
	 //↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓  情况一     ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
//	  if(ADMIN.equals(userid)){
		  String openId = null;
	    	com.umpay.sp.model.common.ReqMessage reqMessage = ReqMessageUtil.makeSpReq();
	 	    Map<String,String>  reqMap = reqMessage.getReqMap();
	 	    reqMap.put("agentId", agentId);  
	 	    reqMap.put("userId", userid);   //  这里 程序里定义的是userId 文档里却是salesmanId
	 	    reqMap.put("state", "2");    //这里是查询的sql必须的。。。 状态 2-正常;4-注销
	 	    
//	 	    reqMessage.setReqMap(reqMap);  //这步可有可无
	 	   logger.info("----#---------#--获取代理商openId入参--#---------#--"+reqMessage);
	 	    com.umpay.sp.model.common.ResMessage resMessage = operPlatRelServiceRemot.getOperPlatRels(reqMessage);
	 	   logger.info("----#---------#--获取代理商openId出参--#---------#--"+resMessage);
	 		String retCode = resMessage.getRetCode();
	 		String retMsg1 = resMessage.getRetMsg();   //和上面的retMsg区分
	 		if(StringUtil.isEmpty(retCode)){    //可能这种情况并不会出现
	 			logger.info("----#---------#--获取代理商openId失败--#---------#--");
	 			resultMap.put("retCode", "0001");
				resultMap.put("retMsg", retMsg1);
				return JSONObject.fromObject(resultMap).toString(); 
	 		}  //getOperPlatRels 时出错  直接返回
	    	
	 		if("0000".equals(retCode)){
				Map<String, Object> map2 = resMessage.getResMap();
				String totalSize = (String) map2.get("totalSize");
				logger.info("----#---------#--totalSize--#---------#--   " + totalSize);
				//获取集合信息
				List<OperplatRel> list2=(List<OperplatRel>)map2.get("operPlatRels");
				if(list2 !=null && !list2.isEmpty()){ 
					for (OperplatRel operPlatRel : list2) {  //应该只有一条吧
						//调用接口，获取openId 
						 openId = operPlatRel.getExternaluserid();    //这种获取方式是否对。。
						 logger.info("----#---------#--openId--#---------#--   " + openId);
					}
				}
				
			}else{
				logger.info("----#---------#--查询业务员以及代理商的openid失败：--#---------#--" + retCode);
				resultMap.put("retCode", "0001");
				resultMap.put("retMsg", retMsg1);
				return JSONObject.fromObject(resultMap).toString();
			}
	 		
	 		// 熬到这里   发微信
	 		
	 		JSONObject tempjson = new JSONObject();
			tempjson.put("touser", openId);   // 刚才获取的openId
			tempjson.put("template_id", temid);   //所需下发的模板消息的id  暂时不知如何
			tempjson.put("form_id", formId);   //表单提交场景下，为 submit 事件带上的 formId；支付场景下，为本次支付的 prepay_id
			tempjson.put("page", "pages/selfhelpDeployment/selfhelpDeployment?fromPush=true&currtabIndex=2");
			tempjson.put("data", data);   //具体的模板信息
			
			String toWeixinJSON = tempjson.toString();   //准备发送给微信api的内容
			JSONObject jsonFromWX = null;
		 	logger.info("----#---------#-- 发微信入参--#---------#--"+toWeixinJSON);
			String strFromWX = WeixinHttpClientUtils.httpsRequest(weixin_ACCESS_TOKEN_NOT_COMPLETE+token, weixin_SEND_METHOD, toWeixinJSON);
		 	   logger.info("----#---------#-- 发微信出参--#---------#--"+strFromWX);

			jsonFromWX = JSONObject.fromObject(strFromWX);  // from weixin api
			
			String retCodeFromWX = jsonFromWX.getString("errcode"); 
			String retMsgFromWX = jsonFromWX.getString("errmsg");
			
			if(StringUtil.isEmpty(retCodeFromWX)){
				logger.info("----#---------#--微信返回信息读取失败：--#---------#--" + retMsgFromWX);
				resultMap.put("retCode", "0001");
				resultMap.put("retMsg", "微信返回信息读取失败");
				return JSONObject.fromObject(resultMap).toString();
			}
			
			if("0".equals(retCodeFromWX)){
				logger.info("----#---------#--微信返回成功：--#---------#--" + retMsgFromWX);
				resultMap.put("retCode", "0000");
				resultMap.put("retMsg", "成功");
				return JSONObject.fromObject(resultMap).toString();    //场景一  成功结束
			}else{
				logger.info("----#---------#--微信返回失败：--#---------#--" + retMsgFromWX);
				resultMap.put("retCode", "0001");
				resultMap.put("retMsg", retMsgFromWX);   //透传
				return JSONObject.fromObject(resultMap).toString();
			}
		
	}
	
	
	/**
	 * 开通pos提交接口 中的根据图片地址数组批量生成图片文件
	 * 
	 * 同时返回图片存放的文件夹路径
	 * 
	 * Author: Vermouth.yf 
	 * Date: 2017-6-5 
	 * @param imgUrl
	 * @return
	 */
	private String createImg(String srcPath, String imgUrl, String storeId) throws Exception{
		logger.info("----#---------#--获取服务器图片，开始--#---------#--" + imgUrl);
		FileInputStream fis = null;
		FileOutputStream fos = null;
		logger.info("imgUrl: "+imgUrl +"\n" + "srcPath: "+ srcPath);
		String imgDir = srcPath+File.separator +storeId;  //该storeId的图片文件夹
		File dir = new File(imgDir);
		if(!dir.exists()){
			dir.mkdirs();
		}
		
		//获得图片名称  
		String imgPath = imgUrl.substring(imgUrl.lastIndexOf("=")+1);   //    user\xxx\xxx.jpg
		String imgName = imgUrl.substring(imgUrl.lastIndexOf("/")+1);   //  xxx.jpg
		if(StringUtil.isEmpty(imgPath)){
			logger.info("----#---------#--获取服务器图片名称，失败。图片名称为空--#---------#--" );
			return null;
		}else
		    logger.info("----#---------#--获取服务器图片名称，成功。图片名称为"+imgPath+"--#---------#--" );
		
		try {
			File file = new File(imgPath);   //用截取的本地路径
			if (!file.exists()) {
				fis = new FileInputStream(srcPath + "styles/saasXcx/non.jpg");	//获取不到图片，则显示默认图片
			}else {
				fis = new FileInputStream(imgPath);
			}
			fos = new FileOutputStream(imgDir+File.separator+imgName);  
			byte tmp[] = new byte[1024];
			int i = 0;
			while ((i = fis.read(tmp)) != -1) {
				fos.write(tmp, 0, i);
			}
			fos.flush();
		} catch (Exception e) {
			throw e;
		} finally {
			if (fos != null) {
                try {
                    fos.close();
                } catch (Exception e) {
                	 throw e;
                }
            }
		}
		return imgDir;
	}
	
	/**
	 *  将压缩文件encode成base64字符串
	 * Author: Vermouth.yf 
	 * Date: 2017-6-5 
	 */
	private String encodeZip(String zipPath)throws Exception{
		// 读入压缩包  并将压缩包转换为BASE64格式字符串     
			    FileInputStream fis = null;
			    StringBuilder sb = null;
		  try{  
			    fis = new FileInputStream(zipPath);
				sb = new StringBuilder();
				byte[] b = new byte[1024*1024*5];  //5M
				int len;
				while((len=fis.read(b))!=-1){
					byte [] b1 = new byte[len];
					for (int i = 0; i < b1.length; i++) {
						b1[i]=b[i];
					}
					byte [] a = encode64(b1).getBytes("UTF-8");
					byte [] gbk = new String(a,0,a.length,"UTF-8").getBytes("GBK");
					String c = new String(gbk,"GBK");
					sb.append(c);
					logger.info("----#---------#--Base64 Code below--#---------#-- "+1);
				}
//				logger.info("----#---------#--Base64 Code below--#---------#-- \n" +sb.toString());
				return sb.toString();
		    }catch(Exception e){
		    	logger.info("base64转换失败"+e);
		    	throw new Exception(e);
		    }finally{
		    	if(fis!=null){
				        fis.close();
		    	}
		    }
	}
	
	
	 /**
	  * 由于不想篡改已有的Base64工具类里的代码  ， 故复制出来进行修改
	 * Author: Vermouth.yf 
	 * Date: 2017-6-7 
	 * @param d
	 * @return
	 */
	public final String encode64(byte[] d) {
	        if (d == null) {
	            return null;
	        }
	        byte[] data = new byte[d.length + 2];
	        System.arraycopy(d, 0, data, 0, d.length);
	        byte[] dest = new byte[data.length / 3 * 4];

	        int sidx = 0;
	        for (int didx = 0; sidx < d.length; didx += 4) {
	            dest[didx] = (byte) (data[sidx] >>> 2 & 0x3F);
	            dest[(didx + 1)] = (byte) (data[(sidx + 1)] >>> 4 & 0xF | data[sidx] << 4 & 0x3F);
	            dest[(didx + 2)] = (byte) (data[(sidx + 2)] >>> 6 & 0x3 | data[(sidx + 1)] << 2 & 0x3F);
	            dest[(didx + 3)] = (byte) (data[(sidx + 2)] & 0x3F);

	            sidx += 3;
	        }

	        for (int idx = 0; idx < dest.length; ++idx) {
	            if (dest[idx] < 26)
	                dest[idx] = (byte) (dest[idx] + 65);
	            else if (dest[idx] < 52)
	                dest[idx] = (byte) (dest[idx] + 97 - 26);
	            else if (dest[idx] < 62)
	                dest[idx] = (byte) (dest[idx] + 48 - 52);
	            else if (dest[idx] < 63)
	                dest[idx] = 43;
	            else {
	                dest[idx] = 47;
	            }

	        }

	        for (int idx = dest.length - 1; idx > d.length * 4 / 3; --idx) {
	            dest[idx] = 61;
	        }
	        return new String(dest);
	    }
	
	public static void main(String[] args) throws FileNotFoundException, IOException {
			ArrayList<String> bankList = new ArrayList<String>();
			bankList.add("中国建设银行");
			bankList.add("中国工商银行");
			bankList.add("中国农业银行");
			bankList.add("中国银行");
			
			Map<String,List<String>> map = new HashMap<String,List<String>>();
			map.put("list", bankList);
			
			Object json = (Object)JSONObject.fromObject(map);
			//System.out.println(json);
			String listArr = ((JSONObject)json).getString("list");
	//		System.out.println(listArr);
			JSONArray imgUrlArray = JSONArray.fromObject(listArr);
			
			//System.out.println("img数组为"+imgUrlArray);
			
			Iterator<Object> it = imgUrlArray.iterator();
			
			while(it.hasNext()){
				String url = (String)it.next();
				//System.out.print(url+" || ");
			}
			//System.out.println();
			
			String oriUrl = "http://192.168.2.16:8080/umfWeChatPlat/merchantDeploy/showImg?name=D:/SaasImg/60000101/6e03d09332dc491dbe4d11ff8a87b040.jpg";
			
			String temp = oriUrl.substring(oriUrl.lastIndexOf("=")+1);
			
			//System.out.println(temp);
			
			String redisValue = "yangfan,123456,0111";
			
			String assistid = redisValue.substring(redisValue.indexOf(",")+1,redisValue.lastIndexOf(","));
			String password = redisValue.substring(redisValue.lastIndexOf(",")+1);
			//System.out.println(assistid);
			//System.out.println(password);
			
	//		String sss = "ssafdasd";
	//		JSONObject jsontest = JSONObject.fromObject(sss);
	//		System.out.println(jsontest);
			
	//		System.out.println(map.get("xxx"));
			
	//		String uuid = UUID.randomUUID().toString();
	//		System.out.println(uuid);
	//		Map<String,String>  req1 = new HashMap<String,String>();
	//		req1.put("storeId", "ss");
	//		req1.put("2", "B");
	//		req1.put("3", "C");
	//		req1.put("4", "D");
	//		req1.put("5", "E");
	//		Map<String,String>  req = new HashMap<String,String>();
	//		req.put("storeId", "xxxxx");
	//		
	//		req.putAll(req1);   // 遇到相同的key 后来的value会覆盖之前的value
	//		
	//		System.out.println(req);
			
			//测试压缩文件
//			String srcPath = "D:"+File.separator+"SaasImg";
//			
//			String zipName = "D:"+File.separator+"zipFile"+File.separator+"xxx.zip";
//			
//			File srcFile = new File(srcPath);
//			File zipFile = new File(zipName);
//			
////			if(!zipFile.getParentFile().exists()){
////				zipFile.getParentFile().mkdirs();
////			}
//			
//			ZipUtil.makeDirectoryToZip(srcFile,zipFile,"",9);
			
			JSONArray arr = JSONArray.fromObject("[]");
			//System.out.println(arr);
			
//			List<String> paths = new ArrayList<String>();
//			paths.add("D:/SaasImg/60000101/0ce27e3d9b7f4acda514bdbef6557a35.jpg");
//			paths.add("D:/SaasImg/60000101/6e03d09332dc491dbe4d11ff8a87b040.jpg");
//			
//			    String zipPath = "D:/SaasImg/60000101/60000101.zip";
//			    File zipFile = new File(zipPath);
//			    ZipUtil.zip(zipFile, paths);
			
//			String s = "s";
//			String S = "S";
//			byte [] sbt = s.getBytes();
//			byte [] Sbt = S.getBytes();
//			for(byte i:sbt){
//				System.out.print(i+",");
//			}
//			System.out.println();
//			for(byte i:Sbt){
//				System.out.print(i+",");
//			}
//			System.out.println();
			
			
//			String jsontest = "{\"yang\":\"heihei\"}";
//			JSONObject json1 = JSONObject.fromObject(jsontest);
//			try{
//			String huang = (String)json1.get("huang");
//			String yang = json1.getString("yang");
//			}catch(Exception e){
//				System.out.println("有空值"+e);
//			}
//			System.out.println("xxx");
//			
//			File file = new File("D:\\Redis-x64-3.2.100.zip");
//			System.out.println(file.length());
			
			
			String src = "wujietian12,h1,111111,xxxxx";  //我要第二段和第三段
			
			String [] srcArr = src.split(",");
			
			String assistId = srcArr[1];
			String password1 = srcArr[2];
			
			//System.out.println(assistId);
		//	System.out.println(password1);
			
			Date date = new Date();
		    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
		  //  System.out.println(dateFormat.format(date));
			
		}
	

}
